10 REM DEFINE MACROS BY ROBERT ROCKEFELLER 20 PRINT"[147]  DEFINE MACROS ":PRINT 30 PRINT 40 PRINT" REFER TO THE DOCUMENTATION FOR THE " 50 PRINT" INSTRUCTIONS FOR USING THIS PROGRAM." 60 PRINT:PRINT" PRESS ANY KEY TO CONTINUE" 70 GETA$:IF A$=""THEN 70 90 DIM FLAG%(51) : REM FLAG ARRAY INDICATES IF A CERTAIN MACRO IS DEFINED 100 DIM MACRO$(51) : REM HOLDS MACRO STRINGS 110 M1$="THIS CHARACTER HAS BEEN USED. WOULD YOU LIKE TO SELECT ANOTHER (Y/N)?" 120 M2$="HOW MANY CHARACTERS WILL BE IN THE" 130 M2$=M2$+" MACRO STRING REPRESENTED BY THIS CHARACTER ? " 140 A=780 : X=781 : Y=782 : REM SYS REGISTERS 180 REM SELECT MACRO CHARACTER 200 PRINT"[147]SELECT A MACRO CHARACTER." 210 GOSUB 1130 230 IF A$<>"*" THEN 300 240 PRINT"WHICH MACRO DEFINITION DO YOU WISH TO CANCEL ?" 250 GOSUB 1130 260 IF A$="*" THEN 240 270 FLAG%(MACNUM)=0 : REM CANCEL DEF 280 GOTO 470 300 IF FLAG%(MACNUM)<>0 THEN PRINT M1$ : INPUT B$ : IF LEFT$(B$,1)="Y" THEN 200 320 FLAG%(MACNUM)=1 330 MACRO$(MACNUM)="" 370 REM DEFINE MACRO STRING 390 PRINTM2$: INPUT COUNT 400 IF COUNT>20 THEN 390 420 FOR LOOP=1 TO COUNT 430 INPUT"DECIMAL VALUE ";DEC 440 MACRO$(MACNUM)=MACRO$(MACNUM)+CHR$(DEC) 450 NEXT LOOP 470 INPUT"FINISHED ALL DEFINITIONS (Y/N) ";B$ 480 IF LEFT$(B$,1)<>"Y" THEN 200 520 REM CREATE MACRO TABLE 540 PTR=4*4096 : REM CREATE MACRO TABLE AT THIS ADDRESS 550 FOR ENTRY=0 TO 51 560 IF FLAG%(ENTRY)=0 THEN 750 580 REM CONVERT TO REVERSED SCREEN CODE VALUE 590 IF ENTRY<26 THEN CODE=ENTRY+1+128 600 IF ENTRY>25 THEN CODE= ENTRY+39+128 620 POKE PTR,CODE : REM 1ST BYTE OF 1 MACRO ENTRY IS SCREEN CODE VALUE 630 PTR=PTR+1 : REM NEXT TABLE BYTE 650 POKE PTR,LEN(MACRO$(ENTRY))+2 : REM 2ND BYTE IS ENTRY LENGTH 660 PTR=PTR+1 : REM NEXT TABLE BYTE 680 FOR ILOOP=1 TO LEN(MACRO$(ENTRY)) : REM REST OF 1 ENTRY IS MACRO STRING 690 POKE PTR,ASC(MID$(MACRO$(ENTRY),ILOOP,1)) 700 PTR=PTR+1 710 NEXT ILOOP 730 IF PTR=>4*4096+500 THEN PRINT"MACRO TABLE TOO LARGE !!!" : STOP 750 NEXT ENTRY 790 REM SAVE MACRO TABLE 820 PRINT"[147]8 - DISK 830 [153]"9 - DISK 840 INPUT"SAVE TO DEVICE NUMBER ";DEV 850 IF DEV<>1 AND DEV<>8 AND DEV<>9 THEN 840 870 REM USE THE KERNAL SETLFS 880 POKE A,0 : POKE X,DEV : POKE Y,0 890 SYS 65466 910 REM SETUP FILENAME 920 B$="RUNSCRIPT MACROS" 930 FOR LOOP=1 TO LEN(B$) 940 POKE 849+LOOP,ASC(MID$(B$,LOOP,1)) 950 NEXT LOOP 970 REM USE KERNAL SETNAM 980 POKE A,LEN(B$) : POKE X,850AND255 : POKE Y,850/256 990 SYS 65469 1010 REM USE KERNAL SAVE 1020 POKE 253,0 : POKE 254,4*16 1030 POKE A,253 : POKE X,PTRAND255 : POKE Y,PTR/256 1040 SYS 65496 1070 END 1110 REM INPUT SUBROUTINE 1130 INPUT A$ : A$=LEFT$(A$,1) 1150 IF A$="*" THEN RETURN 1160 IF A$<"A" THEN 1130 1170 IF A$>"[218]" THEN 1130 1180 IF A$>"Z" AND A$<"[193]" THEN 1130 1200 IF A$<="Z" THEN MACNUM=ASC(A$)-65 1210 IF A$>="[193]" THEN MACNUM=ASC(A$)-167 1230 RETURN